# coding=utf-8
"""
作者：董新强
创建时间：2020-3-31
描述：参数评估 模型
"""
import numexpr
from numpy import ndarray


def negative_log_likelihood_ab(ab, theta: ndarray, c: ndarray, d: ndarray, response_vector: list) -> float:
    """
    针对a的icc负对数似然函数
    :param a: 区分度
    :param b: 难度数组
    :param theta: 能力数组
    :param c: 猜测度数组
    :param d: 渐近线数组
    :param response_vector: 相响数组
    :return:
    """
    a, b = ab
    irc = numexpr.evaluate('c + ((d - c) / (1 + exp((-a * (theta - b)))))')
    ll = numexpr.evaluate('sum(where(response_vector, log(irc), log(1 - irc)))')
    return -ll


def negative_log_likelihood_theta(theta: float, a: ndarray, b: ndarray, c: ndarray, d: ndarray, response_vector: list) -> float:
    """
    针对theta的icc负对数似然函数
    :param theta:能力
    :param a: 区分度数组
    :param b: 难度数组
    :param c: 猜测度数组
    :param d: 渐近线数组
    :param response_vector: 相响数组
    :return:
    """
    irc = numexpr.evaluate('c + ((d - c) / (1 + exp((-a * (theta - b)))))')
    ll = numexpr.evaluate('sum(where(response_vector, log(irc), log(1 - irc)))')
    return -ll
